<-- %%NOBANNER%% --> prop2_ss.sas

/*------------------<--  Start of Description -->--------------------\
| Sample size for two independent proportions;                       |
|--------------------<--  End of Description -->---------------------|
|--------------------------------------------------------------------|
|--------------<--  Start of Files or Arguments Needed -->-----------|
| Arguments:                                                         |
|   - Required:                                                      |
|     y1 = true proportion under null hypothesis, 0------------|
|--------------------------------------------------------------------|
|----------------<--  Start of Example and Usage -->-----------------|
| Example: %prop2_ss(sides=1,y1=.04,min_y2=.30,max_y2=.4,inc_y2=.01, |
|                    power=.9,plot=p);                               |
| Usage:   %prop2_ss(ALPHA=.05,SIDES=2,POWER=.80,Y1=.,MIN_Y2=.,      |
|                    MAX_Y2=.,INC_Y2=.,R=1,PLOT= );                  |
| Reference: Bergstralh, EJ.  SAS macros for sample size and power   |
|            calculations.  Proceedings of the 9th annual SAS Users  |
|            Group International Conference.                         |
|            Equation #'s 13 and 14.                                 |
\-------------------<--  End of Example and Usage -->---------------*/
%MACRO prop2_ss(ALPHA=.05,SIDES=2,POWER=.80,Y1=.,MIN_Y2=.,
                MAX_Y2=.,INC_Y2=.,R=1,PLOT= );
/*--------------------------------------------\
| Author:  Michael Riggs and Eric Bergstralh; |
| Purpose: Sample Size for two independent    |
|          proportions;                       |
\--------------------------------------------*/
 OPTIONS MISSING=' ' NOCENTER;
   %LET PLOT=%UPCASE(&PLOT);
 DATA T1;
      ALPHA=&ALPHA;
      SIDES=&SIDES;
      Y1=&Y1;
      MIN_Y2=&MIN_Y2;
      MAX_Y2=&MAX_Y2;
      INC_Y2=&INC_Y2;
      POWER=&POWER;
      R=&R;
    ZALPHA=(PROBIT(1-ALPHA))*(SIDES=1) + (PROBIT(1-ALPHA/2))*(SIDES=2);
    ZBETA=PROBIT(POWER);
    IF MAX_Y2=. THEN DO;
      MAX_Y2=MIN_Y2+1; INC_Y2=MIN_Y2+2;  *NEED 1 EXEC OF DO;
    END;
    TY1=Y1;
    TR=R;
    DO Y2=MIN_Y2 TO MAX_Y2 BY INC_Y2;
      PBAR=(TY1+TR*Y2)/(1+TR);
      *NORMAL APPROX. TO BINOMIAL;
       N1_NML=( (ZALPHA*SQRT(PBAR*(1-PBAR)*(1+1/TR)) +
                ZBETA*SQRT(TY1*(1-TY1)+Y2*(1-Y2)/TR))  /
               (Y2-TY1) )**2;
       N1_NML=CEIL(N1_NML);
       N2_NML=TR*N1_NML;
      *NORMAL APPROX. FOLLOWING 2*ARCSIN(SQRT(PROP.)) TRANSFORMATION;
       AS_Y1=2*ARSIN(SQRT(TY1));
       AS_Y2=2*ARSIN(SQRT(Y2));
       N1_ARS=(((ZALPHA+ZBETA)/(AS_Y1-AS_Y2) )**2)*(1+1/TR);
       N1_ARS=CEIL(N1_ARS);
       N2_ARS=TR*N1_ARS;
      *---------------------------------------------------;
       REL_RISK=Y2/TY1;
       ODD_RATO=(Y2*(1-TY1))/(TY1*(1-Y2));
       FORMAT REL_RISK ODD_RATO  7.2;
      *---------------------------------------------------;
       OUTPUT;
     END;
 LABEL Y1='Group 1*Proportion'
       Y2='Group 2*Proportion'
       REL_RISK='Relative*Risk'
       ODD_RATO='Odds*Ratio'
       N1_NML='Group 1*Sample Size*Binomial @'
       N2_NML='Group 2*Sample Size*Binomial @'
       N1_ARS='Group 1*Sample Size*Arcsin @@'
       N2_ARS='Group 2*Sample Size*Arcsin @@';
RUN;
 PROC PRINT SPLIT='*';
    ID y1; var y2 rel_risk odd_rato n1_nml n2_nml n1_ars n2_ars;
 TITLE2
       'SAMPLE SIZE REQUIREMENTS FOR TWO INDEPENDENT PROPORTIONS';
TITLE3
 "Alpha=&alpha, Sides=&sides, Power=&power, Ratio N2/N1=&r";
Title4"Group 1 true proportion=&y1";
FOOTNOTE1 '@, Normal approximation to binomial.';
FOOTNOTE2
          '@@, Arcsin transformation followed by normal approximation.';

 %IF &MAX_Y2 NE .  %THEN %DO;
    %IF &PLOT= P  %THEN %DO;
      PROC PLOT NOLEGEND;
           PLOT N2_NML*Y2='N'  N2_ARS*Y2='A' / OVERLAY;
            LABEL N2_NML='Sample size for Group 2'
                  Y2='True Group 2 proportion';
            FOOTNOTE1 'N=Normal approximation to the binomial';
            FOOTNOTE2
            'A=Arcsin transformation followed by normal approximation';
    %END;
    %ELSE %IF &PLOT= G  %THEN %DO;
           SYMBOL1  F=SPECIAL V=J H=1 I=j l=1;
           SYMBOL2  F=SPECIAL V=m H=1 i=j l=2;
          PROC GPLOT ;
           PLOT N2_NML*Y2 N2_ARS*Y2 / overlay;
            LABEL N2_NML='Group 2 sample size'
                  Y2='True Group 2 proportion';
           FOOTNOTE1 F=SPECIAL   ' ' M=(+6,-.7) H=2   'K'
                     F=TRIPLEX  H=1    M=(-.5,+.3)
                     '  Normal approx. to binomial'
                     F=SPECIAL M=(+6 -.4) H=2   'M'
                     F=TRIPLEX  H=1    M=(-.5,+.4)
                     '  Normal approx. with arcsin';
                run;
                quit;
    %END;
    RUN;
%END;
%MEND prop2_ss;